package pack1;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Created by jack on 2017/7/2.
 * 元注解,指注解的注解
 * 元数据，即解释数据的数据，这就是所谓配置
 * 注解的功能来自用这个注解的地方。
 */
//指示注释类型所适用的程序元素的种类
//@Target说明了Annotation所修饰的对象范围：Annotation可被用于 packages、types（类、接口、枚举、Annotation类型）、类型成员（方法、构造方法、成员变量、枚举值）、方法参数和本地变量（如循环变量、catch参数）。
// 在Annotation类型的声明中使用了target可更加明晰其修饰的目标。
//作用：用于描述注解的使用范围（即：被描述的注解可以用在什么地方）
//METHOD:用于描述方法
@Target(ElementType.METHOD)
//注解会在class字节码文件中存在，在运行时可以通过反射获取到
@Retention(RetentionPolicy.RUNTIME)
//在帮助文档中加入注解：
//要想在制作JavaDoc文件的同时将注解信息加入到API文件中，可以使用java.lang.annotation.Documented
//说明该注解将被包含在javadoc中
@Documented
//@interface是用来自定义JAVA Annotation的语法，普通的开发人员可能很少用到它，但是它的功能很强大
//一般的应用程序开发人员可能从不需要定义一个注释类型，但定义我们自己的注释类型并不复杂。注释类型的定义跟定义一个接口相似，我们需要在 interface这个关键字前面加上一个@符号，即@interface。
// 注释中的每一个方法定义了这个注释类型的一个元素，注释中方法的声明中一定不能包含参数，也不能抛出异 常；方法的返回值被限制为简单类型、String、Class、emnus、注释，和这些类型的数组。方法可以有一个缺省值。
//使用@interface自定义注解时，自动继承了java.lang.annotation.Annotation接口，由编译程序自动完成其他细节。在定义注解时，不能继承其他的注解或接口。
public @interface Action {
    String name();
}
